package com.rt.system.service.impl;

import java.util.List;

import com.rt.common.exception.ServiceException;
import com.rt.common.utils.StringUtils;
import com.rt.system.domain.RtAnswerDataLog;
import com.rt.system.mapper.RtAnswerDataLogMapper;
import com.rt.system.mapper.RtQuestionsInfoMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.rt.system.mapper.RtAnswerDataMapper;
import com.rt.system.domain.RtAnswerData;
import com.rt.system.service.IRtAnswerDataService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 作答结果数据（难易度调整用）Service业务层处理
 * 
 * @author Yg
 * @date 2022-04-21
 */
@Service
public class RtAnswerDataServiceImpl implements IRtAnswerDataService 
{
    @Autowired
    private RtAnswerDataMapper rtAnswerDataMapper;

    @Autowired
    private RtAnswerDataLogMapper rtAnswerDataLogMapper;

    @Autowired
    private RtQuestionsInfoMapper rtQuestionsInfoMapper;

    /**
     * 查询作答结果数据（难易度调整用）
     * 
     * @param id 作答结果数据（难易度调整用）主键
     * @return 作答结果数据（难易度调整用）
     */
    @Override
    public RtAnswerData selectRtAnswerDataById(Long id)
    {
        return rtAnswerDataMapper.selectRtAnswerDataById(id);
    }

    /**
     * 查询作答结果数据（难易度调整用）列表
     * 
     * @param rtAnswerData 作答结果数据（难易度调整用）
     * @return 作答结果数据（难易度调整用）
     */
    @Override
    public List<RtAnswerData> selectRtAnswerDataList(RtAnswerData rtAnswerData)
    {
        return rtAnswerDataMapper.selectRtAnswerDataList(rtAnswerData);
    }

    /**
     * 新增作答结果数据（难易度调整用）
     * 
     * @param rtAnswerData 作答结果数据（难易度调整用）
     * @return 结果
     */
    @Override
    public int insertRtAnswerData(RtAnswerData rtAnswerData)
    {
        return rtAnswerDataMapper.insertRtAnswerData(rtAnswerData);
    }

    /**
     * 修改作答结果数据（难易度调整用）
     * 
     * @param rtAnswerData 作答结果数据（难易度调整用）
     * @return 结果
     */
    @Override
    public int updateRtAnswerData(RtAnswerData rtAnswerData)
    {
        return rtAnswerDataMapper.updateRtAnswerData(rtAnswerData);
    }

    /**
     * 批量删除作答结果数据（难易度调整用）
     * 
     * @param ids 需要删除的作答结果数据（难易度调整用）主键
     * @return 结果
     */
    @Override
    public int deleteRtAnswerDataByIds(Long[] ids)
    {
        return rtAnswerDataMapper.deleteRtAnswerDataByIds(ids);
    }

    /**
     * 删除作答结果数据（难易度调整用）信息
     * 
     * @param id 作答结果数据（难易度调整用）主键
     * @return 结果
     */
    @Override
    public int deleteRtAnswerDataById(Long id)
    {
        return rtAnswerDataMapper.deleteRtAnswerDataById(id);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public String importRtAnswerData(List<RtAnswerData> rtAnswerData, String username) {
        if (StringUtils.isNull(rtAnswerData) || rtAnswerData.size() == 0 ){
            throw new ServiceException("导入数据不能为空！");
        }
        Long successNum = 0L;
        for (RtAnswerData rtAnswerDatum : rtAnswerData) {
            try {
                if (StringUtils.isNull(rtQuestionsInfoMapper.selectRtQuestionsInfoById(rtAnswerDatum.getQuestionId()))){
                    throw new ServiceException("导入失败");
                }
                rtAnswerDatum.setInputOperator(username);
                rtAnswerDataMapper.insertRtAnswerData(rtAnswerDatum);
                successNum++;
            }catch (Exception e){
                throw new ServiceException("导入失败");
            }
        }
        RtAnswerDataLog rtAnswerDataLog = new RtAnswerDataLog();
        rtAnswerDataLog.setInputOperator(username);
        rtAnswerDataLog.setRecordsNum(successNum);
        rtAnswerDataLogMapper.insertRtAnswerDataLog(rtAnswerDataLog);
        return "恭喜您，数据已全部导入成功！";
    }
}
